package com.dq.offer;

import java.util.Arrays;

/**
 * @Author: Dang Qi
 * @Date: 2021/3/15  14:31
 * @Description:
 * 输入一个整数 n ，求1～n这n个整数的十进制表示中1出现的次数。
 *
 * 例如，输入12，1～12这些整数中包含1 的数字有1、10、11和12，1一共出现了5次。

 */
public class CountDigitOne {
    public static void main(String[] args) {
        Solution solution = new CountDigitOne().new Solution();
        int n = 12; //55
        System.out.println(solution.countDigitOne(n));

    }
    class Solution {
        public int countDigitOne(int n) {
            int ans = 0;
            int k = n;
            int p = 1;//累计 10 的次方
            while(n > 0){
                if(n % 10 > 1) ans += (n/10 + 1) * p;
                else if(n % 10 == 1){
                    ans += (n / 10) * p + (k % p) + 1;
                }else {
                    ans += (n / 10) * p;
                }
                n /= 10;
                p *= 10;
            }


            return ans;
        }
    }
}
